home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Sample Code / AOCE Sample Code / PowerTalk Access Modules / Sample PMSAM / PMSAM Framework / RoboSamSlot / HalfGateway.cp < prev    next >
Encoding:
Text File  |  1995-07-28  |  4.5 KB  |  257 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        HalfGateway.cp
  3.  
  4.     Contains:    xxx put contents here xxx
  5.  
  6.     Written by:    Tim Harnett
  7.  
  8.     Copyright:    © 1994 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <5>     2/15/95    TMH        added GetSlot(slotCID)
  13.          <4>    12/12/94    TMH        modified so slot Id is written only once
  14.          <3>    10/11/94    TMH        CommThread integration
  15.          <2>     9/21/94    TMH        Use new Debug.cp ASSERT stuff
  16.          <1>     9/20/94    TMH        Abandon RoadsideRest embrace Mercury
  17.          <2>      9/9/94    TMH        TIncoming/TOutgoing adaptations
  18.                  3/29/94    TMH        xxx put comment here xxx
  19.  
  20.     To Do:
  21. */
  22.  
  23.  
  24. #ifndef    __OCEERRORS__
  25. #include "OCEErrors.h"
  26. #endif
  27.  
  28.  
  29. #ifndef __Debug__
  30. #include "Debug.h"
  31. #endif
  32.  
  33. #ifndef __PLSTRINGFUNCS__
  34. #include "PLStringFuncs.h"
  35. #endif
  36.  
  37.  
  38. #ifndef __Globals__
  39. #include "Globals.h"
  40. #endif
  41.  
  42. #ifndef __FileUtils__
  43. #include "FileUtils.h"
  44. #endif
  45.  
  46. #ifndef __Application__
  47. #include "Application.h"
  48. #endif
  49.  
  50. #ifndef __CRecordID__
  51. #include "CRecordID.h"
  52. #endif
  53.  
  54. #ifndef __CAttribute__
  55. #include "CAttribute.h"
  56. #endif
  57.  
  58. #ifndef __MSAMSlot__
  59. #include "MSAMSlot.h"
  60. #endif
  61.  
  62.  
  63. #ifndef __HalfGateway__
  64. #include "HalfGateway.h"
  65. #endif
  66.  
  67.  
  68. #ifndef __Letter__
  69. #include "Letter.h"
  70. #endif
  71.  
  72.  
  73. #ifndef __UFAILURE__
  74. #include "UFailure.h"
  75. #endif
  76.  
  77. #ifndef __LogErrors__
  78. #include "LogErrors.h"
  79. #endif
  80.  
  81. #pragma segment AOCEHalfGateway
  82.  
  83. //--------------------------------------
  84. //        T A O C E  H a l f G a t e w a y
  85. //--------------------------------------
  86.  
  87. //-------------------------------------------------------------------------------------
  88. TAOCEHalfGateway::TAOCEHalfGateway()
  89. {
  90.     fMSAMRecord = 0;
  91.     
  92.     for(int i= 0; i<kMaxSlots; i++ )    
  93.         fSlotList[i] = 0;
  94. }
  95.  
  96.  
  97.  
  98. //-------------------------------------------------------------------------------------
  99. pascal OSErr TAOCEHalfGateway::BuildSlotListCallBack(long clientData, const AttributePtr attribute)
  100. {
  101.  
  102.     TAOCEHalfGateway* thisAOCEHalfGateway = (TAOCEHalfGateway*)clientData;
  103.     
  104.     PackedRecordIDPtr packedRID;
  105.     RecordID rid;
  106.  
  107.     packedRID = (PackedRecordIDPtr) attribute->value.bytes;
  108.     OCEUnpackRecordID(packedRID,&rid);
  109.  
  110.     FailInfo fi;
  111.     Try(fi) {
  112.     
  113.         thisAOCEHalfGateway->FocSlot(rid.local.cid);
  114.         fi.Success();
  115.     
  116.     } else {
  117.         LogError(fi.error);        // we are in a call back. DO NOT ReSignal()
  118.     }
  119.     
  120.     return 0;
  121. }
  122.  
  123.  
  124. //-------------------------------------------------------------------------------------
  125. TMSAMSlot* TAOCEHalfGateway::FocSlot(CreationID msamRecordCID)
  126. {
  127.  
  128.         //    Find or create a slot record.
  129.         
  130.         
  131.     TMSAMSlot* slot = 0;
  132.     
  133.     for(int i=0; i<kMaxSlots; i++ ) {
  134.         if( (fSlotList[i] != 0) && (fSlotList[i]->GetSlotCID() == msamRecordCID) ) {
  135.             slot = fSlotList[i];
  136.             break;
  137.         }
  138.     }
  139.  
  140.  
  141.     if( slot == 0 ) {
  142.     
  143.         FailInfo fi;
  144.         Try(fi) {
  145.         
  146.             slot = new TMSAMSlot;
  147.             slot->IMSAMSlot(&msamRecordCID);
  148.             this->AddSlot(slot);
  149.             fi.Success();
  150.             
  151.         } else {
  152.             fi.ReSignal();
  153.         }
  154.         
  155.     }
  156.  
  157.  
  158.     return slot;
  159.     
  160.     
  161. }
  162.  
  163.  
  164. //-------------------------------------------------------------------------------------
  165. OSErr TAOCEHalfGateway::SetupSlots(CreationID msamRecordCID)
  166. {
  167.     OSErr osErr = 0;
  168.  
  169.     fMSAMRecord = new CRecordID(gKeyChainDSRefnum,msamRecordCID);
  170.  
  171.         //    Build Slot List.
  172.     CAttribute    slotRecords(kMailServiceAttrTypeNum);
  173.     slotRecords.LookupValues(fMSAMRecord,(CAttributeValueCallBack)BuildSlotListCallBack,(long)this); 
  174.     
  175.  
  176.     // for each slot, get the slot data from the mailservice record and activate the slot
  177.     TMSAMSlot*    msamSlot = 0;    
  178.     for(int i= 0; i<kMaxSlots; i++ ) {
  179.         if( (msamSlot = fSlotList[i]) != 0 ) { 
  180.             osErr = msamSlot->SetSlotInfo();
  181.             if( osErr == noErr ) 
  182.                 msamSlot->Activate();
  183.         }
  184.     }
  185.  
  186.     return osErr;
  187.     
  188. }
  189.  
  190.  
  191.  
  192. //-------------------------------------------------------------------------------------
  193. TMSAMSlot* TAOCEHalfGateway::GetSlot(short slotID)
  194. {
  195.  
  196.     
  197.     TMSAMSlot* slot = 0;
  198.     
  199.     for(int i= 0; i<kMaxSlots; i++ )
  200.         if( (fSlotList[i] != 0 ) && fSlotList[i]->GetSlotID() == slotID ) {
  201.             slot = fSlotList[i];
  202.             break;
  203.         }
  204.             
  205.                     
  206.     ASSERT(slot != 0);
  207.         
  208.     return slot;
  209.  
  210.  
  211. }
  212.  
  213. //-------------------------------------------------------------------------------------
  214. TMSAMSlot* TAOCEHalfGateway::GetSlot(CreationID slotCID)
  215. {
  216.  
  217.     
  218.     TMSAMSlot* slot = 0;
  219.     
  220.     for(int i= 0; i<kMaxSlots; i++ ) {
  221.     
  222.         if( (fSlotList[i] != 0 ) ) {
  223.             CreationID cid = fSlotList[i]->GetSlotCID();
  224.             if( cid == slotCID )
  225.                 slot = fSlotList[i];
  226.             break;
  227.         }
  228.             
  229.     }
  230.     
  231.     ASSERT(slot != 0);
  232.         
  233.     return slot;
  234.  
  235.  
  236. }
  237.  
  238.  
  239.  
  240. //-------------------------------------------------------------------------------------
  241. void TAOCEHalfGateway::AddSlot(TMSAMSlot* msamSlot)
  242. {
  243.  
  244.     for(int i= 0; i<kMaxSlots; i++ )    
  245.         if( fSlotList[i] == 0 ) {
  246.             fSlotList[i] = msamSlot;
  247.             fNumberOfSlots++;
  248.             break;
  249.         }
  250.  
  251.  
  252.     ASSERTPRINT(i != kMaxSlots, ("cannot add new slot TAOCEHalfGateway::AddSlot"));
  253.  
  254. }
  255.  
  256.  
  257.